From: Dan Winship Date: Thu, 6 Jan 2011 22:07:51 +0000 (-0500) Subject: ShellGtkEmbed: revert to old actor/window position-syncing code X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~9305 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=84bac4414c95396e18d28e168b35a7e593677864;p=gnome-shell.git ShellGtkEmbed: revert to old actor/window position-syncing code Synchronizing the actor and window position on paint resulted in lots of syncing, and also resulted in the window mistakenly being left at 0,0 if the actor wasn't visible when the window first mapped. Revert back to the old way of doing it, by tying into clutter_actor_allocate, which was only failing before because of a bug elsewhere. https://bugzilla.gnome.org/show_bug.cgi?id=635695 --- diff --git a/src/shell-gtk-embed.c b/src/shell-gtk-embed.c index 613397fb5..f1caa93c1 100644 --- a/src/shell-gtk-embed.c +++ b/src/shell-gtk-embed.c @@ -166,25 +166,19 @@ shell_gtk_embed_get_preferred_height (ClutterActor *actor, } static void -shell_gtk_embed_paint (ClutterActor *actor) +shell_gtk_embed_allocate (ClutterActor *actor, + const ClutterActorBox *box, + ClutterAllocationFlags flags) { ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor); float wx = 0.0, wy = 0.0, x, y, ax, ay; - float w, h; - CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->paint (actor); + CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)-> + allocate (actor, box, flags); - if (!embed->priv->window) - return; - - /* Move the X window to the same position as the actor; it's much - * easier to just do this from paint() than it is to tray to track - * the position and allocation of @embed and each of its ancestors - * as they change. We don't use get_transformed_position() here - * because we know that the icon isn't scaled or rotated, and so - * it's faster to avoid the floating-point transformations. + /* Find the actor's new coordinates in terms of the stage (which is + * priv->window's parent window. */ - clutter_actor_get_size (actor, &w, &h); while (actor) { clutter_actor_get_position (actor, &x, &y); @@ -198,7 +192,8 @@ shell_gtk_embed_paint (ClutterActor *actor) _shell_embedded_window_allocate (embed->priv->window, (int)(0.5 + wx), (int)(0.5 + wy), - w, h); + box->x2 - box->x1, + box->y2 - box->y1); } static void @@ -245,7 +240,7 @@ shell_gtk_embed_class_init (ShellGtkEmbedClass *klass) actor_class->get_preferred_width = shell_gtk_embed_get_preferred_width; actor_class->get_preferred_height = shell_gtk_embed_get_preferred_height; - actor_class->paint = shell_gtk_embed_paint; + actor_class->allocate = shell_gtk_embed_allocate; actor_class->realize = shell_gtk_embed_realize; actor_class->unrealize = shell_gtk_embed_unrealize;